home *** CD-ROM | disk | FTP | other *** search
/ IRIX 6.2 Development Libraries / SGI IRIX 6.2 Development Libraries.iso / dist / complib.idb / usr / share / catman / p_man / cat3 / complib / chetrf.z / chetrf
Text File  |  1996-03-14  |  6KB  |  199 lines

  1.  
  2.  
  3.  
  4. CCCCHHHHEEEETTTTRRRRFFFF((((3333FFFF))))                                                          CCCCHHHHEEEETTTTRRRRFFFF((((3333FFFF))))
  5.  
  6.  
  7.  
  8. NNNNAAAAMMMMEEEE
  9.      CHETRF - compute the factorization of a complex Hermitian matrix A using
  10.      the Bunch-Kaufman diagonal pivoting method
  11.  
  12. SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
  13.      SUBROUTINE CHETRF( UPLO, N, A, LDA, IPIV, WORK, LWORK, INFO )
  14.  
  15.          CHARACTER      UPLO
  16.  
  17.          INTEGER        INFO, LDA, LWORK, N
  18.  
  19.          INTEGER        IPIV( * )
  20.  
  21.          COMPLEX        A( LDA, * ), WORK( LWORK )
  22.  
  23. PPPPUUUURRRRPPPPOOOOSSSSEEEE
  24.      CHETRF computes the factorization of a complex Hermitian matrix A using
  25.      the Bunch-Kaufman diagonal pivoting method.  The form of the
  26.      factorization is
  27.  
  28.         A = U*D*U**H  or  A = L*D*L**H
  29.  
  30.      where U (or L) is a product of permutation and unit upper (lower)
  31.      triangular matrices, and D is Hermitian and block diagonal with 1-by-1
  32.      and 2-by-2 diagonal blocks.
  33.  
  34.      This is the blocked version of the algorithm, calling Level 3 BLAS.
  35.  
  36.  
  37. AAAARRRRGGGGUUUUMMMMEEEENNNNTTTTSSSS
  38.      UPLO    (input) CHARACTER*1
  39.              = 'U':  Upper triangle of A is stored;
  40.              = 'L':  Lower triangle of A is stored.
  41.  
  42.      N       (input) INTEGER
  43.              The order of the matrix A.  N >= 0.
  44.  
  45.      A       (input/output) COMPLEX array, dimension (LDA,N)
  46.              On entry, the Hermitian matrix A.  If UPLO = 'U', the leading N-
  47.              by-N upper triangular part of A contains the upper triangular
  48.              part of the matrix A, and the strictly lower triangular part of A
  49.              is not referenced.  If UPLO = 'L', the leading N-by-N lower
  50.              triangular part of A contains the lower triangular part of the
  51.              matrix A, and the strictly upper triangular part of A is not
  52.              referenced.
  53.  
  54.              On exit, the block diagonal matrix D and the multipliers used to
  55.              obtain the factor U or L (see below for further details).
  56.  
  57.      LDA     (input) INTEGER
  58.              The leading dimension of the array A.  LDA >= max(1,N).
  59.  
  60.  
  61.  
  62.  
  63.                                                                         PPPPaaaaggggeeee 1111
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70. CCCCHHHHEEEETTTTRRRRFFFF((((3333FFFF))))                                                          CCCCHHHHEEEETTTTRRRRFFFF((((3333FFFF))))
  71.  
  72.  
  73.  
  74.      IPIV    (output) INTEGER array, dimension (N)
  75.              Details of the interchanges and the block structure of D.  If
  76.              IPIV(k) > 0, then rows and columns k and IPIV(k) were
  77.              interchanged and D(k,k) is a 1-by-1 diagonal block.  If UPLO =
  78.              'U' and IPIV(k) = IPIV(k-1) < 0, then rows and columns k-1 and
  79.              -IPIV(k) were interchanged and D(k-1:k,k-1:k) is a 2-by-2
  80.              diagonal block.  If UPLO = 'L' and IPIV(k) = IPIV(k+1) < 0, then
  81.              rows and columns k+1 and -IPIV(k) were interchanged and
  82.              D(k:k+1,k:k+1) is a 2-by-2 diagonal block.
  83.  
  84.      WORK    (workspace/output) COMPLEX array, dimension (LWORK)
  85.              On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
  86.  
  87.      LWORK   (input) INTEGER
  88.              The length of WORK.  LWORK >=1.  For best performance LWORK >=
  89.              N*NB, where NB is the block size returned by ILAENV.
  90.  
  91.      INFO    (output) INTEGER
  92.              = 0:  successful exit
  93.              < 0:  if INFO = -i, the i-th argument had an illegal value
  94.              > 0:  if INFO = i, D(i,i) is exactly zero.  The factorization has
  95.              been completed, but the block diagonal matrix D is exactly
  96.              singular, and division by zero will occur if it is used to solve
  97.              a system of equations.
  98.  
  99. FFFFUUUURRRRTTTTHHHHEEEERRRR DDDDEEEETTTTAAAAIIIILLLLSSSS
  100.      If UPLO = 'U', then A = U*D*U', where
  101.         U = P(n)*U(n)* ... *P(k)U(k)* ...,
  102.      i.e., U is a product of terms P(k)*U(k), where k decreases from n to 1 in
  103.      steps of 1 or 2, and D is a block diagonal matrix with 1-by-1 and 2-by-2
  104.      diagonal blocks D(k).  P(k) is a permutation matrix as defined by
  105.      IPIV(k), and U(k) is a unit upper triangular matrix, such that if the
  106.      diagonal block D(k) is of order s (s = 1 or 2), then
  107.  
  108.                 (   I    v    0   )   k-s
  109.         U(k) =  (   0    I    0   )   s
  110.                 (   0    0    I   )   n-k
  111.                    k-s   s   n-k
  112.  
  113.      If s = 1, D(k) overwrites A(k,k), and v overwrites A(1:k-1,k).  If s = 2,
  114.      the upper triangle of D(k) overwrites A(k-1,k-1), A(k-1,k), and A(k,k),
  115.      and v overwrites A(1:k-2,k-1:k).
  116.  
  117.      If UPLO = 'L', then A = L*D*L', where
  118.         L = P(1)*L(1)* ... *P(k)*L(k)* ...,
  119.      i.e., L is a product of terms P(k)*L(k), where k increases from 1 to n in
  120.      steps of 1 or 2, and D is a block diagonal matrix with 1-by-1 and 2-by-2
  121.      diagonal blocks D(k).  P(k) is a permutation matrix as defined by
  122.      IPIV(k), and L(k) is a unit lower triangular matrix, such that if the
  123.      diagonal block D(k) is of order s (s = 1 or 2), then
  124.  
  125.                 (   I    0     0   )  k-1
  126.  
  127.  
  128.  
  129.                                                                         PPPPaaaaggggeeee 2222
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136. CCCCHHHHEEEETTTTRRRRFFFF((((3333FFFF))))                                                          CCCCHHHHEEEETTTTRRRRFFFF((((3333FFFF))))
  137.  
  138.  
  139.  
  140.         L(k) =  (   0    I     0   )  s
  141.                 (   0    v     I   )  n-k-s+1
  142.                    k-1   s  n-k-s+1
  143.  
  144.      If s = 1, D(k) overwrites A(k,k), and v overwrites A(k+1:n,k).  If s = 2,
  145.      the lower triangle of D(k) overwrites A(k,k), A(k+1,k), and A(k+1,k+1),
  146.      and v overwrites A(k+2:n,k:k+1).
  147.  
  148.  
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  
  175.  
  176.  
  177.  
  178.  
  179.  
  180.  
  181.  
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
  195.                                                                         PPPPaaaaggggeeee 3333
  196.  
  197.  
  198.  
  199.